﻿/* SISTEMA GEOGRAFICO de PUEBLOS */
/* Creacion de tablas */

create table departamento
(
	id_departamento numeric(10),
	nombre varchar(15) not null,
	primary key (id_departamento)
);

create table area
(
	id_area serial,
	primary key (id_area)
);

create table punto_area
(
	id_punto_area serial,
	latitud float not null,
	longitud float not null,
	id_area int,
	primary key (id_punto_area),
	foreign key (id_area) references area
);

create table localidad
(
	id_localidad serial,
	nombre varchar(50) not null,
	num_habitantes numeric(10),
	id_dep numeric(10) not null,
	fec_fundacion date,
	descr varchar(70),
	latitud float not null,
	longitud float not null,
	id_area int,
	primary key (id_localidad),
	foreign key (id_dep) references departamento,
	foreign key (id_area) references area
);

create table actividad
(
	id_actividad serial,
	id_localidad int,
	nombre varchar(50) not null,
	descripcion varchar(200) not null,
	fecha_inicio date,
	fecha_fin date,
	primary key (id_actividad),
	foreign key (id_localidad) references localidad
);

create table autoridad
(
	id_autoridad serial,
	titulo varchar(30) not null,
	nombre_completo varchar(50) not null,
	contacto varchar(50) not null,
	id_localidad int,
	primary key (id_autoridad),
	foreign key (id_localidad) references localidad
);

create table lugar
(
	id_lugar serial,
	nombre varchar(50) not null,
	descr varchar(100) not null,
	id_localidad int,
	id_departamento numeric(10) not null,
	espatrimonio boolean,
	latitud float not null,
	longitud float not null,
	id_area int,
	primary key (id_lugar),
	foreign key (id_localidad) references localidad,
	foreign key (id_departamento) references departamento,
	foreign key (id_area) references area
);

create table horario
(
	id_horario serial,
	descrip varchar(70),
	primary key (id_horario)
);

create table hospedaje
(
	id_hospedaje serial,
	id_lugar int not null,
	id_horario int,
	detalles varchar(70),
	primary key (id_hospedaje),
	foreign key (id_lugar) references lugar,
	foreign key (id_horario) references horario
);

create table servicio_basico
(
	id_servicioB serial,
	nombre varchar(50) not null,
	calidad varchar(30),
	id_lugar int not null,
	id_horario int,
	primary key (id_servicioB),
	foreign key (id_lugar) references lugar,
	foreign key (id_horario) references horario
);

create table medio_transporte
(
	id_medioT serial,
	id_lugar int not null,
	tipo varchar(30) not null,
	descr varchar(100) not null,
	primary key (id_medioT),
	foreign key (id_lugar) references lugar
);

create table parada
(
	id_parada serial,
	nombre varchar(50) not null,
	latitud float not null,
	longitud float not null,
	primary key (id_parada)
);

create table medio_transporteparada
(
	id_mediotransparada serial,
	id_medioT int not null,
	id_parada int not null,
	primary key (id_mediotransparada),
	foreign key (id_medioT) references medio_transporte,
	foreign key (id_parada) references parada
);

create table usuario
(
	id_usuario serial,
	pass varchar(30) not null,
	nombre varchar(30) not null,
	email varchar(40),
	tipo numeric(2) not null,
	fecha_registro date not null,
	datos_adicionales varchar(50),
	primary key (id_usuario)
);

create table itinerario
(
	id_itinerario serial,
	fecha_inicio date,
	fecha_fin date,
	hora_inicio time,
	hora_fin time,
	id_usuario int,
	primary key (id_itinerario),
	foreign key (id_usuario) references usuario 
);

create table ruta
(
	id_ruta serial,
	id_itinerario int not null,
	descr varchar(70),
	tipo varchar(30),
	primary key (id_ruta),
	foreign key (id_itinerario) references itinerario
);

create table punto_ruta
(
	id_punto_ruta serial,
	latitud float not null,
	longitud float not null,
	id_ruta int,
	primary key (id_punto_ruta),
	foreign key (id_ruta) references ruta
);

create table itinerario_ruta
(
	id_itinerarioruta serial,
	id_ruta int not null,
	id_itinerario int not null,
	primary key (id_itinerarioruta),
	foreign key (id_ruta) references ruta,
	foreign key (id_itinerario) references itinerario
);

create table image
(
	id_imagen serial,
	nombre varchar(40) not null,
	exten varchar(5) not null,
	id_usuario int,
	id_lugar int,
	primary key (id_imagen),
	foreign key (id_usuario) references usuario,
	foreign key (id_lugar) references lugar
);

create table comentario
(
	id_comentario serial,
	id_usuario int not null,
	texto varchar(250) not null,
	aprobado boolean not null,
	primary key (id_comentario),
	foreign key (id_usuario) references usuario
);
